<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

</body>

</html>
<script>
    //ES2017标准引入了async函数，使得异步操作变得更加方便
    //async函数可以将异步操作以同步操作的流程表达出来

    // function print(){
    //     //定时器是异步操作
    //     setTimeout(() => {
    //         console.log(1)
    //     },20)
    //     console.log(2)
    // }
    // // 先打印2，再打印1
    // print()

    // function test(ms) {
    //     return new Promise((resolve, reject) => {
    //         setTimeout(() => {
    //             console.log(1)
    //             resolve()
    //         },ms)

    //     })    
    // }

    // async function asynctest(){
    //     await test(20)
    //     console.log(2)
    // }
    // asynctest()

    const getJSON = function (url) {
        const myPromise = new Promise(function (resolve, reject) {
            const handler = function () {
                if (this.readyState !== 4) {// 判断是否请求完成 如果没有完成 则返回
                    return;
                }
                if (this.status === 200) {
                    resolve(this.response);
                } else {
                    reject(new Error(this.statusText))
                }
            }
            // 异步操作 网络请求
            const client = new XMLHttpRequest();// 创建一个请求
            client.open("GET", url); // 设置请求地址和请求方式
            client.onreadystatechange = handler; // 监听请求状态
            client.responseType = "json"; // 设置请求返回的数据类型
            client.setRequestHeader("Accept", "application/json"); // 设置请求头
            client.send();// 发送请求
        })
        return myPromise;
    }


    function ajax(url) {
        return new Promise((resolve, reject) => {
            getJSON(url, function (result) {
                resolve(result)
            }, function (error) {
                reject(error)
            })
        })
    }

    function getInfo(){
        var id = ajax("https://api.github.com/users/github")
    }
</script>